#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>


int count = 0;

void HandlerAlarm(int signal)
{
    printf("hello: %d\n", count);
    exit(1);
}

int main()
{
    signal(SIGALRM, HandlerAlarm);
    alarm(1);
    while(1){
        count++;  
    }
    return 0;
}

//int main()
//{
//    int ret = alarm(30);
//    while(1){
//        printf("hello linux! ret = %d\n", ret);
//        sleep(1);
//        int res = alarm(0);
//        printf("res: %d\n", res);
//    }
//    return 0;    
//}

//int main()
//{
//    while(1){
//        printf("I am child: %d\n", getpid());
//        sleep(1);
//    } 
//    return 0;
//}

//void handler(int signo)
//{
//    printf("get a signo:%d\n", signo);
//}
//
//int main()
//{
//    signal(6, handler);
//    int count = 5;
//    while(1){
//        count--;
//        printf("I am process. I will exit!! %d\n", count);
//        sleep(1);
//        if(count <= 0){
//            abort();
//        }
//    }
//    return 0;
//}











//static void Usage(const char* proc){ 
//    printf("Usage: \n\t %s signo who\n", proc);
//}
//int main(int argc, char* argv[])
//{
//    if(argc != 3){
//        Usage(argv[0]);
//        return 1;
//    }
//    int who = atoi(argv[1]);
//    int signo = atoi(argv[2]);
//    kill(who, signo);
//    return 0;
//}










//int main()
//{
//    if(fork() == 0){
//        while(1){
//            printf("I am child.....\n");
//            sleep(1);
//            int a = 1;
//            a /= 0;
//        }
//    }
//    int status = 0;
//    waitpid(-1, &status, 0);
//    printf("exit code：%d\nexit signal: %d\ncode dump flag: %d\n"
//        ,(status >> 8) & 0xFF, status & 0x7F, (status >> 7) & 1);
//    return 0;
//}



//void handler(int signo)
//{
//    printf("get a signal: %d\n", signo);
//    exit(1);
//}

//int main()
//{
//    signal(2, handler);
//    while(1){
//        printf("hello linux!\n");
//        sleep(1);
//    }
//    return 0;
//}
